//
//  MainViewController.swift
//  iOS07-Weibo-LPK
//
//  Created by 罗培克 on 6/23/15.
//  Copyright © 2015 lpk. All rights reserved.
//

import UIKit

class MainViewController: UITabBarController {
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let tb = MainTabBar()
        // 使用 KVC 修改只读属性的 tabBar
        setValue(tb, forKey: "tabBar")
        
        tb.composeButton .addTarget(self, action: "composeClicked", forControlEvents: UIControlEvents.TouchUpInside)
        
        addChildViewControllers()
        
    }
    
    // 不能使用 private, 否则不能调用,因为运行循环里找不到 private 的方法
//    private func composeClicked() {
    func composeClicked() {
        print(__FUNCTION__)
    }
    
    /// 添加所有子控制器
    private func addChildViewControllers() {
        let path = NSBundle.mainBundle().pathForResource("MainVCSettings.json", ofType: nil)!
        let data = NSData(contentsOfFile: path)!
        
        var error = NSErrorPointer()
        let array = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments, error: error) as! NSArray
        for v: NSDictionary in array as! [[String: String]] {
            addChildViewController(v["vcName"] as! String, title: v["title"] as! String, imageName: v["imageName"] as! String)
        }
        
        if error != nil {
            print(error)
            addChildViewController("HomeTableViewController", title: "首页", imageName: "tabbar_home")
            addChildViewController("MessageTableViewController", title: "消息", imageName: "tabbar_message_center")
            addChildViewController("DiscoverTableViewController", title: "发现", imageName: "tabbar_discover")
            addChildViewController("ProfileTableViewController", title: "我", imageName: "tabbar_profile")
        }
    }
    
    /// 添加子控制器
    private func addChildViewController(vcName: String, title: String, imageName: String) {
        
        let ns = NSBundle.mainBundle().infoDictionary!["CFBundleExecutable"] as! String
        
        // Xcode7.0里,类名需要加命名空间
        // WARING - 这里的 ns 里,不能有"-",不能以数字开头
        // ns 默认来自项目的 $(TARGET_NAME), 
        // 1. 如果因为项目命名问题造成这里报错,不需要重命名项目,只需要修改 Building Settings 里的 Product Name 即可,不能有"-",不能以数字开头
        let cls: AnyClass = NSClassFromString(ns + "." + vcName) as! UITableViewController.Type
        
        // 2. 使用 alloc 的时候,生成的 View 的 frame 有问题,只有中间一块,没有穿透效果
        // 把 window?.backgroundColor 设置为红色,可以明显看到下面两行代码的区别
        // 3. 而且,把这里改为 new 后,据张泽阳同学说,之前在 BaseTableViewController 里 isLogin 初始化的问题也可以解决,原因应该是 alloc 方法初始化不完全
        
//        let vc = cls.alloc() as! BaseTableViewController
        let vc = cls.new() as! BaseTableViewController
        
        // 下面这样也可以
//        let cls = NSClassFromString(ns + "." + vcName) as! UIViewController.Type
//        let vc = cls.alloc().dynamicType.init()
        
//        let vc = HomeTableViewController()
//        print(vc)
        vc.title = title;
        vc.tabBarItem.image = UIImage(named: imageName)
        vc.tabBarItem.selectedImage = UIImage(named: imageName + "_highlighted")
        
        let nav = UINavigationController(rootViewController: vc)
        
        self.addChildViewController(nav)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}
